<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    //   ES2017 async和await
    function timeout(msg, time) {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(msg);
        }, time);
      });
    }

    //   自动执行函数， 用于执行生成器函数
    function run(gen) {
      let it = gen(); // it生成器对象

      // 递归函数
      function step(result) {
        //  规定value必须是一个promise对象，这也要求生成器函数中的yield后面必须跟一个promise对象
        let {
          value,
          done
        } = it.next(result);

        // 如果结束就直接返回
        if (done) {
          return value;
        }
        // 没有结束就继续递归调用step函数
        value.then((result) => step(result));
      }

      // 初次调用step启动函数
      step();
    }

    // async function xiaoming2() {
    //   let y1 = await timeout("小明1秒下楼", 1000);
    //   console.log(y1);

    //   let y2 = await timeout("小明1秒到超市", 1000);
    //   console.log(y2);

    //   let y3 = await timeout("小明1秒后买好铅笔", 1000);
    //   console.log(y3);

    //   let y4 = await timeout("小明1秒回家", 1000);
    //   console.log(y4);
    // }

    // xiaoming2();



    async function xiaoming3() {

      try {
        let y1 = await timeout("小明1秒下楼", 1000);
        console.log(y1);

        let y2 = await Promise.reject("小明在超市中了奖")
        console.log(y2);

        let y3 = await timeout("小明1秒后买好铅笔", 1000);
        console.log(y3);

        let y4 = await timeout("小明1秒回家", 1000);
        console.log(y4);

      } catch (e) {
        console.log(e);
        
        let y5 = await timeout("小明立刻去领奖", 1000);
        console.log(y5);

      }

      // try{}catch{}外面的语句肯定能被执行

      // console.log(y2);


    }

    xiaoming3()

    // xiaoming3().catch(err =>{
    //   console.log(err);
    // })
    // console.log(xiaoming3())
  </script>
</body>

</html>